import { fileURLToPath, URL } from 'node:url'
import viteCompression from 'vite-plugin-compression' //vue3+vite开启gzip压缩以及Nginx配置gzip压缩：https://blog.csdn.net/qq_38902230/article/details/132182707
// import eslintPlugin from 'vite-plugin-eslint'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import fs from 'fs'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
// import { loadEnv } from 'vite';

// https://vitejs.dev/config/

/*-----------------全局环境变量（import.meta.env），会报错 -------------------- */
export default ({ command, mode }) => {
  console.log('mode', mode)
  return defineConfig({
    // base: mode == 'development' ? "/aaa/" : '', // 本地启动路径已更改，测试环境待验证，可能是本地serve的原因，只能实际项目中试
    // base: "/aaa/", // 本地serve启动并不影响，还是没有aaa的才能访问
    plugins: [
      vue(),
      vueJsx(),
      // viteCompression({
      //   filter: /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i, // 需要压缩的文件
      //   threshold: 1024, // 文件容量大于这个值进行压缩
      //   algorithm: 'gzip', // 压缩方式
      //   ext: 'gz', // 后缀名
      //   deleteOriginFile: true, // 压缩后是否删除压缩源文件
      // })
      // eslintPlugin({
      //   include: ['src/**/*.ts', 'src/**/*.vue', 'src/*.ts', 'src/*.vue'],
      // }),
      AutoImport({
        resolvers: [ElementPlusResolver()],
      }),
      Components({
        resolvers: [ElementPlusResolver()],
      }),
    ],
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url)),
        '~': fileURLToPath(new URL('./src/components', import.meta.url)),
        '!': fileURLToPath(new URL('./src/resource', import.meta.url)),
      },
    },
    server: {
      port: 8080,
      https: {
        key: fs.readFileSync('keys/agent2-key.pem'),
        cert: fs.readFileSync('keys/agent2-cert.pem'),
      },
      host: 'stage-eagle.cloud.ottcn.com',
    },
    build: {
      rollupOptions: {
        // 配置rollup的一些构建策略
        output: {
          // 控制输出
          // 在rollup里面, hash代表将你的文件名和文件内容进行组合计算得来的结果
          assetFileNames: '[hash].[name].[ext]',
        },
      },
      assetsInlineLimit: 4096000, // 4000kb  超过会以base64字符串显示
      outDir: 'dist', // 输出名称
      assetsDir: 'assets/bbb', // 静态资源目录，打包后的dist里路径
      // minify: 'terser', // 当设置为 'terser' 时必须先安装 Terser：npm add -D terser
      // terserOptions: {
      //   compress: {
      //     //生产环境时移除console 需下载terser
      //     drop_console: true,
      //     drop_debugger: true,
      //   },
      // },
      //   关闭文件计算
      reportCompressedSize: false,
      //   关闭生成map文件 可以达到缩小打包体积
      sourcemap: false, // 这个生产环境一定要关闭，不然打包的产物会很大
    },
    // Vite生产模式移除console与debugger语句： https://juejin.cn/post/7230717350226493496
    // esbuild: {
    //   drop: mode === 'production' ? ['console', 'debugger'] : [],
    // }
  })
}

/*-----------------下面这种不能用全局环境变量（import.meta.env），会报错 -------------------- */
/* export default defineConfig({
    base: "/aaa/", //本地启动路径已更改
    plugins: [
      vue(),
      vueJsx(),
    ],
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url)),
        '~': fileURLToPath(new URL('./src/components', import.meta.url))
      }
    },
    server: {
      port: 8080
    },
    build: {
      // assetsDir: 'assets/aaa' // 打包后的dist里路径
      rollupOptions: { // 配置rollup的一些构建策略
        output: { // 控制输出
          // 在rollup里面, hash代表将你的文件名和文件内容进行组合计算得来的结果
          assetFileNames: "[hash].[name].[ext]"
        }
      },
      assetsInlineLimit: 4096000, // 4000kb  超过会以base64字符串显示
      outDir: "dist", // 输出名称
      assetsDir: "assets/bbb" // 静态资源目录，打包后的dist里路径
    }
}) */

/* 
----------！！！生产环境时移除console！！！------------
npm add -D terser
一般在生产环境都是需要移除console与debugger相关在开发环境时才需要使用到的语句，通常来说可以使用terser插件。
build: {
  minify: 'terser',
  terserOptions: {
    compress: {
      // 生产环境时移除console
      drop_console: true,
      drop_debugger: true,
    },
  },
}
只是需要多下载一个插件，在GitHub上看见一个更好的方案，配置esbuild就行如下:
esbuild: {
  drop: mode === 'production' ? ['console', 'debugger'] : [],
}
*/
